#!/bin/bash
# 打包
npm run docs:build

# 配置参数
SOURCE_DIR="/data/floyd-blog-page/docs/.vitepress/dist"  # 源静态文件目录
DEST_DIR="/opt/1panel/www/sites/floyd-blog/index"            # 部署目标目录
TEMP_ZIP="/tmp/floyd-blog-dist-$(date +%Y%m%d%H%M%S).zip"  # 临时压缩文件
LOG_FILE="/var/log/floyd-blog-deploy.log"              # 部署日志文件

# 函数：记录日志
log() {
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# 检查源目录是否存在
if [ ! -d "$SOURCE_DIR" ]; then
    log "错误：源目录 $SOURCE_DIR 不存在"
    echo "错误：源目录不存在，请检查路径"
    exit 1
fi

# 检查源目录是否有文件
if [ -z "$(ls -A "$SOURCE_DIR")" ]; then
    log "错误：源目录 $SOURCE_DIR 为空，无法压缩"
    echo "错误：源目录为空，无法部署"
    exit 1
fi

# 创建目标目录（如果不存在）
if [ ! -d "$DEST_DIR" ]; then
    log "目标目录 $DEST_DIR 不存在，正在创建..."
    sudo mkdir -p "$DEST_DIR" || {
        log "错误：创建目标目录 $DEST_DIR 失败"
        echo "错误：创建目标目录失败"
        exit 1
    }
fi

# 压缩静态文件
log "开始压缩源文件：$SOURCE_DIR"
cd "$SOURCE_DIR" || {
    log "错误：无法进入源目录 $SOURCE_DIR"
    echo "错误：无法访问源目录"
    exit 1
}

# 使用zip压缩（排除隐藏文件和目录）
sudo zip -rq "$TEMP_ZIP" . -x ".*" "*/.*" || {
    log "错误：压缩文件失败"
    echo "错误：压缩文件失败"
    exit 1
}

# 检查压缩文件是否生成
if [ ! -f "$TEMP_ZIP" ]; then
    log "错误：压缩文件 $TEMP_ZIP 未生成"
    echo "错误：压缩文件生成失败"
    exit 1
fi

# 备份目标目录现有文件（保留最近3个备份）
BACKUP_DIR="$DEST_DIR.backup"
mkdir -p "$BACKUP_DIR"
BACKUP_FILE="$BACKUP_DIR/floyd-blog-backup-$(date +%Y%m%d%H%M%S).zip"
if [ -n "$(ls -A "$DEST_DIR")" ]; then
    log "开始备份现有文件到 $BACKUP_FILE"
    sudo zip -rq "$BACKUP_FILE" "$DEST_DIR"/* || {
        log "警告：备份现有文件失败，继续部署"
        echo "警告：备份失败，继续部署..."
    }
    # 保留最近3个备份，删除旧备份
    ls -tp "$BACKUP_DIR"/*.zip | grep -v '/$' | tail -n +4 | xargs -I {} sudo rm -- {}
fi

# 清空目标目录（保留目录本身）
log "清空目标目录：$DEST_DIR"
sudo rm -rf "$DEST_DIR"/* || {
    log "错误：清空目标目录失败"
    echo "错误：清空目标目录失败"
    exit 1
}

# 解压到目标目录
log "解压文件到目标目录：$DEST_DIR"
sudo unzip -q "$TEMP_ZIP" -d "$DEST_DIR" || {
    log "错误：解压文件到目标目录失败"
    echo "错误：解压文件失败"
    exit 1
}

# 设置目录权限
sudo chown -R 1000:1000 "$DEST_DIR"
sudo chmod -R 755 "$DEST_DIR"

# 清理临时文件
log "清理临时压缩文件：$TEMP_ZIP"
sudo rm -f "$TEMP_ZIP"

# 完成部署
log "部署成功！源文件已部署到 $DEST_DIR"
echo "部署成功！静态文件已更新至目标目录"
exit 0
